package top.wyloop.fasthome.module.system.service;

import top.wyloop.fasthome.module.system.model.entity.User;

/**
 * @author Wyatt6
 * @date 2025/5/9
 */
public interface UserService {
    boolean checkUsernameFormat(String username);

    boolean checkPasswordFormat(String password);

    /**
     * 创建新用户
     *
     * @param username 用户名
     * @param password 密码
     * @return 新用户对象
     */
    User createUser(String username, String password);

    /**
     * 身份验证
     * 若验证成功则返回用户对象
     *
     * @param username 用户名
     * @param password 密码（明文）
     * @return 用户对象
     */
    User authentication(String username, String password);

    /**
     * 修改密码
     *
     * @param id          用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void changePassword(Long id, String oldPassword, String newPassword);

    /**
     * 以RepeatableRead（可重复读）隔离级别更新用户数据
     * 需要范围锁的属性（username、nickname）不支持更新
     * password属性需要调用changePassword服务来更新
     *
     * @param data id属性用于确定要更新的用户对象记录，非null属性为要更新的数据
     * @return 更新后的用户对象（已脱敏）
     */
    User updateUserAttributesByIdRepeatableRead(User data);

    /**
     * 以Serializable隔离级别更新用户数据
     * password属性需要调用changePassword服务来更新
     *
     * @param data id属性用于确定要更新的用户对象记录，非null属性为要更新的数据
     * @return 更新后的用户对象（已脱敏）
     */
    User updateUserAttributesByIdSerializable(User data);
}
